package com.atguigu.config;

import com.atguigu.bean.Person;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.FilterType;

/**
 * @author : wenchao.long
 * @date : Created in 2020/11/14 08:02:34 周六
 * @description :
 *         <p>
 *         配置类 == 配置文件
 *         `@Configuration` 告诉Spring这是一个配置类
 *         `@ComponentScan` value指定要扫描的包
 *         `includeFilters = Filter[]` 指定扫描的时候只需要包含哪些组件
 *         `excludeFilters = Filter[]` 指定扫描的时候按照什么规则排除哪些组件
 *         `useDefaultFilters = false` 使用自己的配置方式
 *         </p>
 *         <p>
 *         `FilterType.ANNOTATION`          按照注解
 *         `FilterType.ASSIGNABLE_TYPE`     按照给定的类型
 *         `FilterType.ASPECTJ`             使用ASPECTJ表达式
 *         `FilterType.REGEX`               使用正则表达式
 *         `FilterType.CUSTOM`              使用自定义规则
 *         </p>
 */
@Configuration
@ComponentScan(
        basePackages = "com.atguigu.*",
        includeFilters = {
//                @ComponentScan.Filter(type = FilterType.ANNOTATION, classes = {Controller.class}),
//                @ComponentScan.Filter(type = FilterType.ASSIGNABLE_TYPE, classes = {BookService.class}),
                @ComponentScan.Filter(type = FilterType.CUSTOM, classes = {LearnTypeFilter.class})
        },
        useDefaultFilters = false
)
public class SpringConfig {
    /**
     * 类型为返回值的类型 id默认是用方法的名字
     *
     * @return Person
     */
    @Bean
    public Person person() {
        return new Person("liSi", 20);
    }
}
